#include <iostream>
#include <functional>
#include <map>
int add(int a, int b, int c)
{
    return a + b;
}
int minus(int a, int b)
{
    return a - b;
}
int multply(int a, int b)
{
    return a * b;
}
int divide(int a, int b)
{
    return a / b;
}

std::map<char, std::function<int(int, int)>> m; // 注册机

// int calculate(int a, int b, char symbol)
// {
//     switch (symbol)
//     {
//     case '+':
//         add(a, b);
//         break;
//     case '-':
//         minus(a, b);
//         break;
//     case '*':
//         multply(a, b);
//         break;
//     case '/':
//         divide(a, b);
//         break;
//     default:
//         break;
//     }
// }
int calculate(int a, int b, char symbol)
{
    return m[symbol](a, b);
}
int main()
{
    // std::function<
    // std::cout<<calculate(1,2,'+')<<std::endl;

    // 适配器: 将原有逻辑改动以后适应新的逻辑
    // 函数绑定器
    // std::placeholders : 占位符
    // auto f = std::bind(add,std::placeholders::_1,std::placeholders::_2,0 );
    // m['+/'] = f;

    m['+'] = [](int a, int b)
    { return add(a, b, 0); };
    m['-'] = minus;
    m['*'] = multply;
    m['/'] = divide;

    return 0;
}